package com.yyge.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yyge.controller.dto.AddArticleTableDTO;
import com.yyge.entity.ArticleTable;
import com.yyge.entity.ArticleType;
import com.yyge.service.ArticleTableService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * 文章Controller，处理HTTP请求
 */
@RestController
@RequestMapping("/article2")
public class ArticleTableController {

    //引入文章服务
    @Autowired
    private ArticleTableService articleService;


    //    @Autowired
    //    private

    /**
     * 新增文章
     */
    @PostMapping
    public boolean addArticle(@RequestBody AddArticleTableDTO dto) {
        //判断新增的文章是否符合新增的逻辑
        //1.必须要有标题 没有就报错
        Assert.notNull(dto.getTitle(), "文章标题不能为空");
        Assert.notNull(dto.getTag(), "文章内容不能为空");

        //判断有附件没
        if (dto.getAppendix() != null && !dto.getAppendix().isEmpty()) {
            //如果有附件
            //先新增附件
            //todo...新增附件的逻辑

        }

        //再新增文章
        ArticleTable articleTable = new ArticleTable();
        articleTable.setTitle(dto.getTitle()); //赋值标题
        articleTable.setBody(dto.getBody()); //赋值内容
        articleTable.setArticleTitle(dto.getTitle());  //还是标题
        articleTable.setId(1L); //设置id
        articleTable.setCreatedAt(new Date()); //设置创建时间
        articleTable.setUpdatedAT(new Date()); //设置更新时间
        return articleService.save(articleTable);
    }

    /**
     * 根据ID删除文章
     */
    @DeleteMapping("/{id}")
    public boolean deleteArticle(@PathVariable Long id) {
        return articleService.removeById(id);
    }

    /**
     * 更新文章
     */
    @PutMapping
    public boolean updateArticle(@RequestBody ArticleTable articleTable) {
        // 更新时更新时间
        articleTable.setUpdatedAT(new Date());
        return articleService.updateById(articleTable);
    }

    /**
     * 根据ID查询文章
     */
    @GetMapping("/{id}")
    public ArticleTable getArticleById(@PathVariable Long id) {
        return articleService.getById(id);
    }

    /**
     * 查询所有文章
     */
    @GetMapping("/all")
    public List<ArticleTable> getAllArticles() {
        return articleService.list();
    }

    /**
     * 分页查询文章
     */
    @GetMapping("/page")
    public IPage<ArticleTable> getArticlesByPage(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize) {

        Page<ArticleTable> page = new Page<>(pageNum, pageSize);
        IPage<ArticleTable> xxx = articleService.page(page);
        return xxx;
    }
}